package com.tianruan.psychological.common.base.entity.dto;

import com.tianruan.psychological.common.utils.IdGen;
import com.tianruan.psychological.common.utils.StringUtils;
import com.tianruan.psychological.moduls.sys.user.entry.dto.UserDTO;
import com.tianruan.psychological.moduls.sys.user.utils.UserUtils;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

/**
 * @Author: Dong
 * @Email: dong980514280@gmail.com
 * @Create: 2019-11-22 12:03
 * @PS 基础DTO类
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BaseDTO<T> {

    /**
     * 实体编号（唯一标识）
     */
    protected String id;

    protected String remarks;	// 备注
    protected String createBy;	// 创建者
    protected Date createDate;	// 创建日期
    protected String updateBy;	// 更新者
    protected Date updateDate;	// 更新日期
    protected String delFlag; 	// 删除标记（0：正常；1：删除；2：审核）

    /**
     * 是否是新记录（默认：false）
     */
    protected Boolean isNewRecord = false;

    public BaseDTO(String id) {
        this();
        this.id = id;
    }

    /**
     * 插入之前执行方法，需要手动调用
     */
    public void preInsert(){
        // 不限制ID为UUID，调用setIsNewRecord()使用自定义ID
        if (!this.isNewRecord){
            setId(IdGen.uuid());
        }
        UserDTO user = UserUtils.getUser();
        if (org.apache.commons.lang3.StringUtils.isNotBlank(user.getId())){
            this.updateBy = user.getId();
            this.createBy = user.getId();
        }
        this.updateDate = new Date();
        this.createDate = this.updateDate;
    }

    /**
     * 更新之前执行方法，需要手动调用
     */
    public void preUpdate(){
        UserDTO user = UserUtils.getUser();
        if (org.apache.commons.lang3.StringUtils.isNotBlank(user.getId())){
            this.updateBy = user.getId();
        }
        this.updateDate = new Date();
    }

    /**
     * 是否是新记录
     */
    public boolean getIsNewRecord() {
        // 判断是新数据或者是id为空就是新数据
        return isNewRecord || StringUtils.isBlank(this.getId());
    }

}
